/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.futco.sysconthos.Modelo.Admisiones.Daos;

/**
 *
 * @author Usuario
 */

import org.futco.sysconthos.Modelo.Admisiones.Daos.Model;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import java.sql.PreparedStatement;
import java.util.*;

import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
public class Imagen {

    private String cod;
    private String Cod_Tema;
    private String nombre;
    private String titulo;
    private java.sql.Blob contenido;
    private java.sql.Blob contenidoG;
    private String tipo;
    private File fileImg;
    private FileInputStream flujo;
    private File fileImgG;
    private FileInputStream flujoG;





    //  operaciones de persistencia
       public static void registrar(Imagen ar) throws Exception{
           Model basedatos = Model.getInstance();
           
       try{
           //SimpleDateFormat formatoFehca = new SimpleDateFormat("yyyy-MM-dd");
           //String sfecha = formatoFehca.format(this.fecha);
           String sql = "Insert into Imagen(codigo,nombre,titulo,contenido,contenidoG)"+
           "values(?,?,?,?,?);";
          // System.out.println(sql);
            PreparedStatement sentencia = (PreparedStatement) basedatos.getCon().prepareStatement(sql);
            sentencia.setString(1, ar.getCodigo());
            sentencia.setString(2, ar.getNombre());
            sentencia.setString(3, ar.getTitulo());
            //resize(ar,100,70);
            sentencia.setBinaryStream(4, ar.getFlujo(), ar.getFileImg().length());
            sentencia.setBinaryStream(5, ar.getFlujoG(), ar.getFileImgG().length());
            sentencia.executeUpdate();

       }
       catch(Exception er){
                throw new Exception("Error al registrar la Consulta "+er.getMessage());
       }
       finally{
          // basedatos.desconectar(null);
       }
   }

       public static void resize(Imagen ar, int width, int height) throws Exception {
              BufferedImage dest = ImageIO.read(ar.getFileImg());
              BufferedImage bImgEscaladaP = ImagenUtils.scaleToSize(width, height, dest);
              BufferedImage bImgEscaladaG = ImagenUtils.scaleToSize(600, 400, dest);
              //ImageUtils.scaleToSize(width, height, dest);
              ImagenUtils.saveImageToDisk(bImgEscaladaP,"C:\\imagenes\\"+ar.titulo+".jpg","JPEG");
              ImagenUtils.saveImageToDisk(bImgEscaladaG,"C:\\imagenes\\"+ar.titulo+"G.jpg","JPEG");
              //Image i=dest.getScaledInstance(width, height, width);
              ar.setFileImg("C:\\imagenes\\"+ar.titulo+".jpg");
              ar.setFlujo(ar.getFileImg());
              ar.setFileImgG("C:\\imagenes\\"+ar.titulo+"G.jpg");
              ar.setFlujoG(ar.getFileImgG());

       }

       public static void eliminar(String cod) throws Exception{
        String sql = "delete from Imagen where codigo = '"+cod+"';";
        Model basedatos =  Model.getInstance();
        try{
           basedatos.conectar();
           PreparedStatement sentencia = (PreparedStatement) basedatos.getCon().prepareStatement(sql);
          sentencia.execute(sql);
         }
         catch(Exception er){
             System.out.print(er.getMessage());
                throw new Exception("No se puede eliminar la imagen");
        }
       }

       public static void Actualizar(Imagen ar, String cod) throws Exception{
           Model basedatos = Model.getInstance();
       try{
           String sql = "Update Imagen set codigo=?,nombre=?,titulo=?,contenido=?,contenidoG=? where codigo= ?";
           PreparedStatement sentencia = (PreparedStatement) basedatos.getCon().prepareStatement(sql);
            sentencia.setString(1, ar.getCodigo());
            sentencia.setString(2, ar.getNombre());
            sentencia.setString(3, ar.getTitulo());
            //resize(ar,100,70);
            sentencia.setBinaryStream(4, ar.getFlujo(), ar.getFileImg().length());
            sentencia.setBinaryStream(5, ar.getFlujoG(), ar.getFileImgG().length());
             sentencia.setString(6, cod);
           // basedatos.conectar();
           sentencia.executeUpdate();

       }
       catch(Exception er){
                throw new Exception("Error al registrar la Consulta"+er.getMessage());
       }
       finally{
          // basedatos.desconectar(null);
       }
   }



    public static Imagen consultar (String cod) throws Exception {

        Imagen tarticulo = null;
        String sql = "SELECT * From imagen where codigo = '"+cod+"'";
        Model basedatos =  Model.getInstance();
        try{
            basedatos.conectar();
            PreparedStatement sentencia = (PreparedStatement) basedatos.getCon().prepareStatement(sql);
            ResultSet res = sentencia.executeQuery(sql);
            if(res.next()){
                tarticulo = new Imagen();
                tarticulo.cod = cod;
                tarticulo.setNombre(res.getString("nombre"));
                tarticulo.setTitulo(res.getString("titulo"));
                tarticulo.setContenido(res.getBlob("contenido"));
                tarticulo.setContenidoG(res.getBlob("contenidoG"));
                }
          //  basedatos.desconectar(res);
            return tarticulo;
         }
        catch(Exception er){
             Logger.getLogger(Imagen.class.getName()).log(Level.SEVERE, null, er);
            throw new Exception("No se puede ejecutar la consulta de la imagen");
        }
    }

    public static boolean consultarExistencia (String cod) throws Exception {

        boolean articulo = false;
        String sql = "SELECT * From Imagen where codigo = ?;";
        Model basedatos =  Model.getInstance();
        try{
            basedatos.conectar();
          PreparedStatement sentencia = (PreparedStatement) basedatos.getCon().prepareStatement(sql);
           sentencia.setString(1, cod);
            ResultSet res = sentencia.executeQuery(sql);
            if(res.next()){
                articulo =true;

          }
          //  basedatos.desconectar(res);
            return articulo;
         }
        catch(Exception er){
            throw new Exception("No se puede ejecutar la consulta");
        }
    }

    public static Vector listar() throws Exception {
        String sql="Select *  from Imagen";
        Vector articulos = null;
        Model basedatos =  Model.getInstance();
        try{
            basedatos.conectar();
            PreparedStatement sentencia = (PreparedStatement) basedatos.getCon().prepareStatement(sql);

            ResultSet res = sentencia.executeQuery(sql);
            while(res.next()){
                if(articulos == null){
                    articulos = new Vector();
                }
                Imagen tarticulo = new Imagen();
                tarticulo.cod = res.getString("codigo");
                tarticulo.setNombre(res.getString("nombre"));
             
                tarticulo.setTitulo(res.getString("titulo"));
                tarticulo.setContenido(res.getBlob("contenido"));
                tarticulo.setContenidoG(res.getBlob("contenidoG"));
                 articulos.add(tarticulo);
            }
          //  basedatos.desconectar(res);
        }
        catch(Exception er){
            throw new Exception("No se puede ejcutar la consulta de articulos");
        }
        return articulos;

    }

    public static Vector listarImgs() throws Exception {
       String sql="Select * from Imagen";
        Vector articulos = null;
        Model basedatos =  Model.getInstance();
        try{
            basedatos.conectar();
           PreparedStatement sentencia = (PreparedStatement) basedatos.getCon().prepareStatement(sql);
            ResultSet res = sentencia.executeQuery(sql);
            while(res.next()){
                if(articulos == null){
                    articulos = new Vector();
                }

                Hashtable art=new Hashtable();
                art.put("nombre", res.getString("nombre"));
                art.put("nomImg", res.getString("nomImg"));
                if(!res.getString("contenido").equals("NoImagen")){
                    art.put("contenido", res.getBlob("contenido"));
                }else{
                    art.put("contenido", basedatos.getCon().createBlob());
                }
                if(!res.getString("contenidoG").equals("NoImagen")){
                    art.put("contenidoG", res.getBlob("contenidoG"));
                }else{
                    art.put("contenidoG", basedatos.getCon().createBlob());
                }
                articulos.add(art);
            }
        }
        catch(Exception er){
            throw new Exception("No se puede ejcutar la consulta de articulos");
        }
        return articulos;

    }

    /**
     * @return the id
     */
    public String getCodigo() {
        return cod;
    }

    /**
     * @param id the id to set
     */
    public void setCodigo(String codi) {
        this.cod = codi;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the titulo
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * @param titulo the titulo to set
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    /**
     * @return the contenido
     */
    public java.sql.Blob getContenido() {
        return contenido;
    }

    public void setContenido(java.sql.Blob blob){
        this.contenido = blob;
    }



    /**
     * @param contenido the contenido to set
     */

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * @param tipo the tipo to set
     */
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    /**
     * @return the fileImg
     */
    public File getFileImg() {
        return fileImg;
    }

    /**
     * @param fileImg the fileImg to set
     */
    public void setFileImg(String url) {
        this.fileImg = new File( url );
    }

    /**
     * @return the flujo
     */
    public FileInputStream getFlujo() {
        return flujo;
    }

    /**
     * @param flujo the flujo to set
     */
    public void setFlujo(File fileImg) throws FileNotFoundException {
        this.flujo = new FileInputStream( fileImg );
    }

    /**
     * @return the contenidoG
     */
    public java.sql.Blob getContenidoG() {
        return contenidoG;
    }

    /**
     * @param contenidoG the contenidoG to set
     */
    public void setContenidoG(java.sql.Blob contenidoG) {
        this.contenidoG = contenidoG;
    }

/**
     * @return the fileImg
     */
    public File getFileImgG() {
        return fileImgG;
    }

    /**
     * @param fileImg the fileImg to set
     */
    public void setFileImgG(String url) {
        this.fileImgG = new File( url );
    }

    /**
     * @return the flujo
     */
    public FileInputStream getFlujoG() {
        return flujoG;
    }

    /**
     * @param flujo the flujo to set
     */
    public void setFlujoG(File fileImg) throws FileNotFoundException {
        this.flujoG = new FileInputStream( fileImg );
    }

    /**
     * @return the Descripcion
     */
    
    /**
     * @return the Cod_Tema
     */
    public String getCod_Tema() {
        return Cod_Tema;
    }

    /**
     * @param Cod_Tema the Cod_Tema to set
     */
    public void setCod_Tema(String Cod_Tema) {
        this.Cod_Tema = Cod_Tema;
    }
}
